package com.gp.common.utils;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;

import org.springframework.util.Base64Utils;

import com.baomidou.mybatisplus.plugins.Page;
import com.gp.model.entity.BaseUser;

/**
 * @author: 弓成龙
 * @date : 2017年12月11日
 * @email : gcx909109@sina.cn
 * @description: 加密解密工具类
 */
public class EncryptUtil {
  public final static String getMD5(String pwd) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("MD5");// SHA 或者 MD5
    return getBase64(md.digest(pwd.getBytes()));
  }

  public final static String getMD5String(String s) {
    char hexDigits[] =
        {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
    try {
      byte[] btInput = s.getBytes();
      // 获得MD5摘要算法的 MessageDigest 对象
      MessageDigest mdInst = MessageDigest.getInstance("MD5");
      // 使用指定的字节更新摘要
      mdInst.update(btInput);
      // 获得密文
      byte[] md = mdInst.digest();
      // 把密文转换成十六进制的字符串形式
      int j = md.length;
      char str[] = new char[j * 2];
      int k = 0;
      for (int i = 0; i < j; i++) {
        byte byte0 = md[i];
        str[k++] = hexDigits[byte0 >>> 4 & 0xf];
        str[k++] = hexDigits[byte0 & 0xf];
      }
      return new String(str);
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
  }

  public final static String getSHA(String pwd) throws NoSuchAlgorithmException {
    MessageDigest md = MessageDigest.getInstance("SHA");// SHA 或者 MD5
    return getBase64(md.digest(pwd.getBytes()));
  }
  
  /**
   * base64 加密算法
   * @param string
   * @return
   */
  public static String getBase64(byte[] string) {
    return Base64Utils.encodeToString(string);
    
  }
  
  /**
   * 处理用户私密信息
   * @param page
   * @return
   */
  public static Page<BaseUser> HandlerUserPrivateInfo(Page<BaseUser> page) {
    List<BaseUser> records = page.getRecords();
    for (Object object : records) {
      BaseUser user = (BaseUser) object;
      user.setLoginPassword("");
    }
    return page;
  }
  
}

